package control;

import entidad.Servicios;
import entidad.Clientes;
import entidad.MovimientoDetalles;
import entidad.Movimientos;
import frontera.FramePrincipal1;
import java.util.Date;

/**
 * Clase control encargada de la logica del negocio para el proceso CheckIn.
 *
 * @package     entidad.
 * @author      Andres Silva
 *              Alejandro
 *              Francisco Monasterio
 *              Juan Felipe Sarmiento
 *              Giovanny Ricardo Rodriguez Chitiva.
 *
 * @version     0.4.
 * @see         Servicios.java, Clientes.java, MovimientoDetalles.java, Movimientos.java, FramePrincipal1.java.
 * @copyright   2010.
 */
public class CheckInCTR {

    /**
     * getServicioById
     * Obtiene un Servicio por id.
     */

    public String verificarDatos(String cedula){
        if(!verificarLongitudCedula(cedula)){
            return ("Longitud cedula incorrecta");
        }
        if(!buscarCliente(cedula)){
            return ("El Cliente no exíste!!!");
        }
        return ("");
    }

    public Boolean verificarLongitudCedula (String cedula) {
        return (cedula.length() > 5 && cedula.length() <= 10)? true:false;
    }

    private Boolean buscarCliente(String cedula){
        ClientesCTR cl = new ClientesCTR();
        Clientes c = cl.getclienteByCC(Integer.parseInt(cedula.trim()));
        if(c!=null){
            return true;
        }else{
            return false;
        }
    }

    public Servicios getServicioById(int id){
        Servicios s = new Servicios();
        for(Servicios t : FramePrincipal1.sistema.getServicios()){
            if(t.getId() == id){
                s = t;
            }
        }
        return s;
    }

    /**
     * calcularTotal
     * Calcula el valor total de un servicio
     */
    public float calcularTotal(int cantidad, int iva, int valorUnitario){
        float total = cantidad * valorUnitario * iva / 100;
        return total + valorUnitario;
    }

    /**
     * abrirCheckin
     * Genera el CheckIn para un Cliente.
     * Crea un Movimiento por Cliente y genera un detalle de Hospedaje.
     */
    public void abrirCheckin(Clientes cliente, Servicios servicio){
        //Creando Movimiento
        Movimientos movimiento = new Movimientos();
        movimiento.setClientes(cliente);
        movimiento.setEstado(true);
        movimiento.setFechaIni(new Date());

        //Registrando el Detalle Hospedaje
        MovimientoDetalles detalle = new MovimientoDetalles();
        detalle.setCantidad(1);
        detalle.setCliente(cliente);
        detalle.setMovimiento(movimiento);
        detalle.setServicios(servicio);
        int total = servicio.getIva()*servicio.getValorUnitario()/100;
        detalle.setValorTotal(total);

        FramePrincipal1.sistema.addMovimientoDetalle(detalle);
        FramePrincipal1.sistema.setMovimientos(movimiento);
        servicio.setEstado(false);//Cambia el estado del Servicio para que no se pueda utilizar más.
    }

    /**
     * validarCheckIn
     * Valida que un Cliente pueda hacer CheckIn en el Hotel.
     */
    public boolean validarCheckIn(Clientes cliente){
        for(Movimientos m : FramePrincipal1.sistema.getMovimientos()){
            if(m.getClientes().equals(cliente) && m.isEstado()) return false;
        }
        return true;
    }

}
